package controlador;

import Utilidades.Errores;
import Utilidades.Fechas;
import java.sql.SQLException;
import java.util.*;
import java.text.ParseException;
import modelo.RegistroAccesoModelo;
import modelo.entidades.Acceso;
import modelo.entidades.AccesoImp;
import modelo.entidades.Entidad;
import modelo.entidades.RegistroAcceso;
import modelo.entidades.RegistroAccesoImp;
import modelo.entidades.Vehiculo;
import modelo.entidades.VehiculoImp;
import vista.RegistroAcceso.RegistroAccesoVista;

/**
 *
 * @author jjcamacho
 */
public class RegistroAccesoControladorImp extends AbstractControladorImp<RegistroAccesoModelo, RegistroAccesoVista, String>
        implements RegistroAccesoControlador {

    @Override
    protected Entidad generaEntidad(List<String> datos) {
        /* La entidad generada siempre es la misma, ya sea para crear o modificar un registro
         * aunque los datos a usar de la misma variarán. En el caso de la creación del
         * registro no se usa la fecha de salida, mientras que durante la modificación no
         * se usa la fecha de entrada, por eso no importa que sean la misma. */
        RegistroAcceso registro = null;
        Acceso acceso = new AccesoImp(datos.get(0));
        Vehiculo vehiculo = new VehiculoImp(datos.get(1));

        try {
            Date fecha = Fechas.textoAFecha(datos.get(2));
            java.sql.Timestamp fechaSQL = Fechas.obtenerTimestampSQL(fecha);
            registro = new RegistroAccesoImp(vehiculo, acceso, fechaSQL);
            registro.setFechaSalida(fechaSQL);
        } catch (ParseException ex) {
            Errores.mostrarError(ex);
        } catch (Exception ex) {
            Errores.mostrarError(ex);
        }

        return registro;
    }

    @Override
    protected Entidad generaEntidad(String pk) {
        RegistroAcceso registro = null;
        try {
            registro = getModel().obtenerEntidad(pk);
        } catch (SQLException ex) {
            Errores.mostrarError(ex);
        } catch (Exception ex) {
            Errores.mostrarError(ex);
        }
        return registro;
    }
}
